--- /dev/null
+#include <gtk/gtk.h>
+
+static GtkWidget *header_stack;
+static GtkWidget *page_stack;
+
+static void
+back_to_main (GtkButton *button)
+{
+ gtk_stack_set_visible_child_name (GTK_STACK (header_stack), "main");
+ gtk_stack_set_visible_child_name (GTK_STACK (page_stack), "page1");
+}
+
+static void
+go_to_secondary (GtkButton *button)
+{
+ gtk_stack_set_visible_child_name (GTK_STACK (header_stack), "secondary");
+ gtk_stack_set_visible_child_name (GTK_STACK (page_stack), "secondary");
+}
+
+int
+main (int argc, char *argv[])
+{
+ GtkBuilder *builder;
+ GtkWidget *win;
+
+ gtk_init (NULL, NULL);
+
+ builder = gtk_builder_new ();
+ gtk_builder_add_callback_symbol (builder, "back_to_main", G_CALLBACK (back_to_main));
+ gtk_builder_add_callback_symbol (builder, "go_to_secondary", G_CALLBACK (go_to_secondary));
+ gtk_builder_add_from_file (builder, "teststackedheaders.ui", NULL);
+ gtk_builder_connect_signals (builder, NULL);
+
+ win = (GtkWidget *)gtk_builder_get_object (builder, "window");
+ header_stack = (GtkWidget *)gtk_builder_get_object (builder, "header_stack");
+ page_stack = (GtkWidget *)gtk_builder_get_object (builder, "page_stack");
+
+ gtk_window_present (GTK_WINDOW (win));
+
+ gtk_main ();
+
+ return 0;
+}
--- /dev/null
+<interface>
+ <object class="GtkWindow" id="window">
+ <property name="default-width">600</property>
+ <property name="default-height">400</property>
+ <property name="icon-name">preferences-desktop-font</property>
+ <child type="titlebar">
+ <object class="GtkStack" id="header_stack">
+ <property name="visible">True</property>
+ <child>
+ <object class="GtkHeaderBar">
+ <property name="visible">True</property>
+ <child>
+ <object class="GtkButton">
+ <property name="visible">True</property>
+ <property name="label">New</property>
+ <property name="valign">center</property>
+ <signal name="clicked" handler="go_to_secondary"/>
+ </object>
+ <packing>
+ <property name="pack-type">start</property>
+ </packing>
+ </child>
+ <child type="title">
+ <object class="GtkStackSwitcher">
+ <property name="visible">True</property>
+ <property name="stack">page_stack</property>
+ </object>
+ </child>
+ </object>
+ <packing>
+ <property name="name">main</property>
+ </packing>
+ </child>
+ <child>
+ <object class="GtkHeaderBar">
+ <property name="visible">True</property>
+ <child>
+ <object class="GtkButton">
+ <property name="visible">True</property>
+ <property name="label"><</property>
+ <property name="valign">center</property>
+ <signal name="clicked" handler="back_to_main"/>
+ </object>
+ <packing>
+ <property name="pack-type">start</property>
+ </packing>
+ </child>
+ </object>
+ <packing>
+ <property name="name">secondary</property>
+ </packing>
+ </child>
+ </object>
+ </child>
+ <child>
+ <object class="GtkStack" id="page_stack">
+ <property name="visible">True</property>
+ <child>
+ <object class="GtkScrolledWindow">
+ <property name="visible">True</property>
+ <property name="hexpand">True</property>
+ <property name="vexpand">True</property>
+ <property name="hscrollbar-policy">always</property>
+ <property name="vscrollbar-policy">always</property>
+ <child>
+ <object class="GtkLabel">
+ <property name="visible">True</property>
+ <property name="halign">center</property>
+ <property name="valign">center</property>
+ <property name="label">Page 1</property>
+ </object>
+ </child>
+ </object>
+ <packing>
+ <property name="name">page1</property>
+ <property name="title">Page 1</property>
+ </packing>
+ </child>
+ <child>
+ <object class="GtkScrolledWindow">
+ <property name="visible">True</property>
+ <property name="hexpand">True</property>
+ <property name="vexpand">True</property>
+ <property name="hscrollbar-policy">always</property>
+ <property name="vscrollbar-policy">always</property>
+ <child>
+ <object class="GtkLabel">
+ <property name="visible">True</property>
+ <property name="halign">center</property>
+ <property name="valign">center</property>
+ <property name="label">Page 2</property>
+ </object>
+ </child>
+ </object>
+ <packing>
+ <property name="name">page2</property>
+ <property name="title">Page 2</property>
+ </packing>
+ </child>
+ <child>
+ <object class="GtkScrolledWindow">
+ <property name="visible">True</property>
+ <property name="hexpand">True</property>
+ <property name="vexpand">True</property>
+ <property name="hscrollbar-policy">always</property>
+ <property name="vscrollbar-policy">always</property>
+ <child>
+ <object class="GtkLabel">
+ <property name="visible">True</property>
+ <property name="halign">center</property>
+ <property name="valign">center</property>
+ <property name="label">Secondary</property>
+ </object>
+ </child>
+ </object>
+ <packing>
+ <property name="name">secondary</property>
+ </packing>
+ </child>
+ </object>
+ </child>
+ </object>
+</interface>